]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
dash: properly restore item label on popup close
authorStéphane Démurget <stephane.demurget@free.fr>
Sat, 3 Nov 2012 20:03:33 +0000 (21:03 +0100)
committerStéphane Démurget <stephane.demurget@free.fr>
Tue, 6 Nov 2012 23:26:11 +0000 (00:26 +0100)
We simply hide the label when the popup is opened instead of relying
on the popup state when the hover state change.

To do this we replace the flag isMenuUp by a 'menu-state-changed' signal
on the AppWellIcon. This simplifies the dash label visibility handling
code that need additional changes for the bug.

https://bugzilla.gnome.org/show_bug.cgi?id=657315

js/ui/appDisplay.js
js/ui/dash.js

index b0ff291baf1c3539a07b4e339d8163518f07c2e0..803b7d788d28608b7e5eb4b8eedac72e773fd5f7 100644 (file)
@@ -479,7 +479,6 @@ const AppWellIcon = new Lang.Class({
                                                 Lang.bind(this,
                                                           this._onStateChanged));
         this._onStateChanged();
-        this.isMenuUp = false;
     },
 
     _onDestroy: function() {
@@ -561,7 +560,8 @@ const AppWellIcon = new Lang.Class({
             this._menuManager.addMenu(this._menu);
         }
 
-        this.isMenuUp = true;
+        this.emit('menu-state-changed', true);
+
         this.actor.set_hover(true);
         this._menu.popup();
 
@@ -578,7 +578,7 @@ const AppWellIcon = new Lang.Class({
 
     _onMenuPoppedDown: function() {
         this.actor.sync_hover();
-        this.isMenuUp = false;
+        this.emit('menu-state-changed', false);
     },
 
     _onActivate: function (event) {
index e1ad32145ca37c676fbeec84778d5658bf908df2..9d5ad24d60c8dc0b45d76324e43cae309f66fb6f 100644 (file)
@@ -503,6 +503,10 @@ const Dash = new Lang.Class({
                                    Lang.bind(this, function() {
                                        display.actor.opacity = 255;
                                    }));
+        display.connect('menu-state-changed',
+                        Lang.bind(this, function(display, opened) {
+                            this._itemMenuStateChanged(item, opened);
+                        }));
 
         let item = new DashItemContainer();
         item.setChild(display.actor);
@@ -518,8 +522,21 @@ const Dash = new Lang.Class({
         return item;
     },
 
+    _itemMenuStateChanged: function(item, opened) {
+        // When the menu closes, it calls sync_hover, which means
+        // that the notify::hover handler does everything we need to.
+        if (opened) {
+            if (this._showLabelTimeoutId > 0) {
+                Mainloop.source_remove(this._showLabelTimeoutId);
+                this._showLabelTimeoutId = 0;
+            }
+
+            item.hideLabel();
+        }
+    },
+
     _onHover: function (item) {
-        if (item.child.get_hover() && !item.child._delegate.isMenuUp) {
+        if (item.child.get_hover()) {
             if (this._showLabelTimeoutId == 0) {
                 let timeout = this._labelShowing ? 0 : DASH_ITEM_HOVER_TIMEOUT;
                 this._showLabelTimeoutId = Mainloop.timeout_add(timeout,